package chapter02

/**
  * create by unseRdoG on  2021-05-28  14:12
  */
object Test08_DataTypeConversion {

  def main(args: Array[String]): Unit = {
    /**
      * scala 数据类型转换原则
      * （1）自动提升原则：有多种类型的数据混合运算时，系统首先自动将所有数据转换成精度大的那种数据类型，然后再进行计算。
      * （2）把精度大的数值类型赋值给精度小的数值类型时，就会报错，反之就会进行自动类型转换。
      * （3）（byte，short）和 char 之间不会相互自动转换。
      * （4）byte，short，char 他们三者可以计算，在计算时首先转换为 int 类型。
      *
      **/

      //（1）自动提升原则：有多种类型的数据混合运算时，系统首先自动将所有数据转换成精度大的那种数据类型，然后再进行计算。
    val a1: Byte = 10
    val b2: Long = 1000L
    // 自动类型转换
    val result : Long = a1 + b2
    println(result)

    // 强制类型转换
    val result2: Int = (a1 + b2.toInt)
    println(result2)


    //（2）把精度大的数值类型赋值给精度小的数值类型时，就会报错，反之就会进行自动类型转换。
    // 大精度 -> 小精度   如果不超出范围，也可以强转，如果超出范围，就会报错
    val b1: Long = 10
    val b3: Long = 10000000000L
    println("10  Long -> Int  " + b1.toInt)

    println("10000000000  Long -> Int" + b3.toInt)


    // 强制类型转换
    val n1: Int = 2.5.toInt    // 只会取整数部分
    println(n1)

    val n2: Int = -2.5.toInt     // 只会取整数部分
    println(n2)


    /**
    *  数值类型  和  String 类型的转换
    * */
    //(1) 数值  转 String
    val n:Int = 27
    val s: String = n + ""

    //(2) String 转 数值
    val m1: String = "2"
    val m2: String = "3.3"

    m1.toInt
    m2.toDouble
  }

}
